package main;

import java.io.IOException;
import java.io.InputStream;
import java.util.zip.ZipFile;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.XMLReaderFactory;

/**
 * Parst eine ODT Datei und kann eine daraus entstehende SimpleText Datei als String zureuckliefern.
 * 
 *@author Patrick Bauer
 */
public class ODTParser {
    /**
     * Handler zum Verarbeiten der Parser-Events
     */
    private ODTContentHandler handler;

    /**
     * Dateiname der zu parsenden Datei
     */
    private String fileName;

    /**
     * Initialisiert die Instanz mit Standardwerten und setzt den Dateiname der zu verarbeiten Datei.
     *
     * @param fileName die zu verarbeitende Datei
     */
    public ODTParser(String fileName) {
        this.handler = new ODTContentHandler();
        this.fileName = fileName;
    }

    /**
     * Liest die ODT Datei uns und parst diese.
     */
    public void parse() throws IOException, SAXException {
        //load xml file from odt
        ZipFile zipFile = new ZipFile(this.fileName);
        InputStream inputStream = zipFile.getInputStream(zipFile.getEntry("content.xml"));
        InputSource inputSource = new InputSource(inputStream);

        //instance xmlreader
        XMLReader xmlReader = XMLReaderFactory.createXMLReader();
        xmlReader.setContentHandler(this.handler);
        xmlReader.parse(inputSource);
    }


    /**
     * Liefert den Buffer des Contenhandler zureuck. Dieser enthaehlt die XML Datei im SimpleText Format als String.
     * 
     * @return der Buffer
     */
    public String getString() {
        return this.handler.getBuffer();
    }
   
}
